package be.ipl.pigolo.testDomaine;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;

import org.junit.Before;
import org.junit.Test;

import be.ipl.pigolo.domaine.Cochon;
import be.ipl.pigolo.domaine.Cochon.Couleur;
import be.ipl.pigolo.domaine.Cochon.Etat;

public class testCochon {

	/**
	 * @param args
	 */

	private Cochon cochon;
	private Cochon cochon2;

	@Before
	public void setUp() throws Exception {
		this.cochon = new Cochon(1, 2, 5, Couleur.BLANC, Etat.NON_RAMASSER);
		this.cochon2 = new Cochon(2, 13, 13, Couleur.BLANC, Etat.RAMASSER);
	}

	@Test
	public void testConstructeur1() {
		this.cochon = null;
		assertNull(this.cochon);
		this.cochon = new Cochon(1, Couleur.VERT, Etat.RAMASSER);
		assertNotNull(cochon);
		assertEquals(1, this.cochon.getId());
		assertEquals(Couleur.VERT, this.cochon.getCouleur());
		assertEquals(Etat.RAMASSER, this.cochon.getEtat());
		this.cochon = new Cochon(1, Couleur.BLANC, Etat.NON_RAMASSER);
		assertNotNull(cochon);
		assertEquals(1, this.cochon.getId());
		assertEquals(Couleur.BLANC, this.cochon.getCouleur());
		assertEquals(Etat.NON_RAMASSER, this.cochon.getEtat());
	}

	@Test
	public void testConstructeur2() {
		this.cochon = new Cochon(1, 10, 10, Couleur.VERT, Etat.RAMASSER);
		assertNotNull(cochon);
		assertEquals(1, this.cochon.getId());
		assertEquals(10, this.cochon.getX());
		assertEquals(10, this.cochon.getY());
		assertEquals(Couleur.VERT, this.cochon.getCouleur());
		assertEquals(Etat.RAMASSER, this.cochon.getEtat());
	}

	@Test
	public void testGetId() {
		assertEquals(2, this.cochon2.getId());
	}

	@Test
	public void testGetX() {
		assertEquals(2, this.cochon.getX());
	}

	@Test
	public void testGetY() {
		assertEquals(5, this.cochon.getY());
	}

	@Test
	public void testGetCouleur() {
		assertEquals(Couleur.BLANC, this.cochon.getCouleur());
	}

	@Test
	public void testGetEtat() {
		assertEquals(Etat.NON_RAMASSER, this.cochon.getEtat());
	}

	@Test
	public void testSetX() {
		this.cochon.setX(7);
		assertEquals(7, this.cochon.getX());
	}

	@Test
	public void testSetY() {
		this.cochon.setY(10);
		assertEquals(10, this.cochon.getY());
	}

	@Test
	public void testSetCouleur() {
		this.cochon.setCouleur(Couleur.GRIS);
		assertEquals(Couleur.GRIS, this.cochon.getCouleur());
	}

	@Test
	public void testSetEtat() {
		this.cochon.setEtat(Etat.RAMASSER);
		assertEquals(Etat.RAMASSER, this.cochon.getEtat());
	}

	@Test
	public void testCompareToCouleurPlusPetit() {
		// couleur cochon => GRIS
		// couleur cochon2 => BLANC
		this.cochon.setCouleur(Couleur.GRIS);
		assertEquals(
				-1,
				cochon.compareToCouleur(cochon2.getCouleur(),
						cochon.getCouleur()));
	}

	@Test
	public void testCompareToCouleurPlusGrand() {
		// couleur cochon => GRIS
		// couleur cochon2 => BLANC
		this.cochon.setCouleur(Couleur.GRIS);
		assertEquals(
				1,
				cochon.compareToCouleur(cochon.getCouleur(),
						cochon2.getCouleur()));
	}

	@Test
	public void testCompareToCouleurEgale() {
		// couleur cochon => GRIS
		this.cochon.setCouleur(Couleur.GRIS);
		this.cochon2.setCouleur(Couleur.GRIS);
		assertEquals(
				0,
				cochon.compareToCouleur(cochon.getCouleur(),
						cochon2.getCouleur()));
	}

	@Test
	public void testComparePositionNonEgale() {
		// position cochon => 2,5
		// position cochon2 => 13,13
		assertTrue(this.cochon.comparePosition(cochon2));

		// position cochon => 2,5
		// position cochon2 => 3,4
		this.cochon2.setX(3);
		this.cochon2.setY(4);
		assertTrue(this.cochon.comparePosition(cochon2));
	}

	@Test
	public void testComparePositionEgale() {
		// position cochon => 2,5
		// position cochon2 => 2,5
		this.cochon2.setX(2);
		this.cochon2.setY(5);
		assertFalse(this.cochon.comparePosition(cochon2));
	}

}
